﻿// Hello.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <opencv2/opencv.hpp>
using namespace cv;

//这个main函数是作业2
//int main()
//{
//	
//	Mat image = imread("D:\\opencv\\sources\\samples\\data\\lena.jpg");
//
//	Mat imageGauss, image1, image2, gray, gray1, hsv, hsvChannels[3];
//
//	//对图像做高斯平滑处理并显示
//	GaussianBlur(image,imageGauss,Size(5,5),0);
//
//	imshow("source image",image);
//	imshow("Gaussian filtered image",imageGauss);
//	waitKey();
//
//	//对图像使用resize和pyrDown缩小一半再一半，显示各图像
//	resize(image,image1,Size(image.cols/2,image.rows/2));
//	pyrDown(image1,image2);
//	imshow("half size",image1);
//	imshow("quarter size",image2);
//	waitKey();
//
//	//彩色转灰度并作阈值化，显示
//	cvtColor(image,gray,COLOR_BGR2GRAY);
//	threshold(gray,gray1,120,0xff,THRESH_BINARY);//二值化
//	imshow("gray",gray);
//	imshow("threshold image",gray1);//阈值的
//	waitKey();
//
//	return 0;
//}

//作业3
//int main()
//{
	//打印BGR各分量
	//加载图像到内存
	//IplImage *image = cvLoadImage("D:\\opencv\\sources\\samples\\data\\lena.jpg");
	//CvScalar scalar;//标量 数量
	//for (int i = 0; i <= image->height - 1; ++i)
	//{
	//	for (int j = 0; j <= image->width - 1; ++j) {
	//		//获取像素点的RGB颜色分量
	//		scalar = cvGet2D(image,i,j);
	//		printf("第%d个像素的R：%lf，B：%lf，G：%lf\n",(i*image->width)+j, scalar.val[2], scalar.val[0], scalar.val[1]);
	//		getchar();//防止打印太快，暂停一次打印一次
	//	}
	//}


	//打印HSV各分量
	//加载图像到内存
	//IplImage *image = cvLoadImage("D:\\opencv\\sources\\samples\\data\\lena.jpg");
	////注意图像必须和输入图像的size，颜色位深度，通道一致
	//IplImage *image1 = cvCreateImage(cvSize(image->width,image->height),
	//	image->depth,image->nChannels);

	//cvZero(image1);//清空image_data数据
	//cvCvtColor(image,image1,CV_BGR2HSV);

	//CvScalar scalar;//标量 数量
	//for (int i = 0; i <= image1->height - 1; ++i)
	//{
	//	for (int j = 0; j <= image1->width - 1; ++j) {
	//		//获取像素点的RGB颜色分量
	//		scalar = cvGet2D(image1, i, j);
	//		printf("第%d个像素的H：%d°，S：%lf，V：%lf\n", (i*image->width) + j, 
	//			(int)scalar.val[0] * 2, scalar.val[1] / 255, scalar.val[2] / 255);
	//		getchar();//防止打印太快，暂停一次打印一次
	//	}
	//}
//}



//狒狒图片
int main()
{
	
	Mat image1 = imread("D:\\opencv\\sources\\samples\\data\\baboon.jpg");
	//HSV分量显示
	/*Mat image, gray, hsv, hsvChannels[3];
	pyrDown(image1, image);
	cvtColor(image, gray, COLOR_BGR2GRAY);

	imshow("source image", image);
	imshow("gray", gray);
	waitKey();

	cvtColor(image, hsv, COLOR_BGR2HSV);
	split(hsv, hsvChannels);
	imshow("Hue", hsvChannels[0]);
	imshow("Saturation", hsvChannels[1]);
	imshow("Value", hsvChannels[2]);
	waitKey();*/

	//RGB分量显示
	Mat rgbChannels[3];
	split(image1, rgbChannels);
	imshow("Blue",rgbChannels[0]);
	imshow("Green", rgbChannels[1]);
	imshow("Red", rgbChannels[2]);
	waitKey();
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门提示: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
